/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import java.util.HashMap;

/**
 *
 * @author Diego
 */
public class HashPaginas {
    
    
    private MarcoPagina [] tabla;
    private int ancho;
    
    public MarcoPagina getElemento(int index){
        return tabla[index];
    }
    
    public HashPaginas(int ancho){
        this.ancho= ancho;
        tabla = new MarcoPagina[ancho];
        System.out.println("Se creo el arreglo correctamente");
    }
    
    public void add(MarcoPagina pag){
        tabla[functionKey(pag.getPagina().getDireccionVirtual().getEntero())]= pag;
        System.out.println("Se agrego un elemento");
    }
    
    public int functionKey(String num){
       return hash(calculateHash(num), ancho);
    }
    
    private int calculateHash(String input) {
    int h = 0;
    int len = input.length();
    for (int i = 0; i < len; i++) {
        h = 31 * h + input.charAt(i);
    }
    return h;
}
    
    private int hash(int a, int ancho) {         
      a*= 0.6180334;
      a*= 0.6180334;
      a*= 0.6180334;
      a*= 0.6180334;
      a*= 0.6180334;
      a*= 0.6180334;
      a*= 0.6180334;
      a*= 0.6180334;
      a*= 47;
      a%=ancho;
      return a;   
}
    
    public MarcoPagina busquedaVirtual(String dirVirt){
        if(tabla[functionKey(dirVirt)]!= null && tabla[functionKey(dirVirt)].getPagina().getDireccionVirtual().getEntero().equals(dirVirt)){
            System.out.println("Elemento encontrado");
            return tabla[functionKey(dirVirt)];
             
        }
        System.out.println("No se encontro el elemento");
        return null;
    }
    
    /*
    public Pagina busquedaVirtual(String dirVirt){
        int key = functioHash()nKey(dirVirt);
        if(tabla.containsKey(key)){
            System.out.println("encontrado "+dirVirt);
            return (Pagina)tabla.get(key);
            
        }else{
            System.out.println("No existe elemento con la dirección "+dirVirt);
            return null;
        }
        
    }*/
    
}
